package com.xxxtea.controller;

import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxtea.common.Result;
import com.xxxtea.dto.PageQuery;
import com.xxxtea.entity.GoodsOrder;
import com.xxxtea.service.GoodsOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 旧物订单管理控制器
 * 
 * 提供旧物订单的增删改查功能，包括：
 * - 新增旧物订单（自动生成订单号）
 * - 删除旧物订单
 * - 更新旧物订单信息
 * - 查询订单详情
 * - 获取订单列表
 * - 分页查询订单
 * 
 * @author badman
 * @since 1.0.0
 */
@Slf4j
@Api("旧物订单接口")
@RestController
@RequestMapping("/goodsOrder")
public class GoodsOrderController {
	
	/**
	 * 旧物订单服务
	 */
	@Resource
	private GoodsOrderService goodsOrderService;

	/**
	 * 新增旧物订单
	 * 自动生成雪花算法订单号
	 * 
	 * @param request 旧物订单信息
	 * @return 操作结果
	 */
	@PostMapping
	@ApiOperation("新增旧物订单")
	public Result<String> save(@RequestBody GoodsOrder request) {
		// 使用雪花算法生成唯一订单号
		request.setOrderNo(IdUtil.getSnowflakeNextIdStr());
		// 调用服务层保存订单信息
		if (!goodsOrderService.save(request)) {
			return Result.error("添加失败!");
		}
		return Result.success();
	}

	/**
	 * 根据ID删除旧物订单
	 * 
	 * @param id 订单ID
	 * @return 操作结果
	 */
	@DeleteMapping("/{id}")
	@ApiOperation("删除旧物订单")
	public Result<String> removeById(@PathVariable String id) {
		// 调用服务层删除订单
		if (!goodsOrderService.removeById(id)) {
			return Result.error("删除失败!");
		}
		return Result.success();
	}

	/**
	 * 更新旧物订单信息
	 * 
	 * @param request 更新的订单信息
	 * @return 操作结果
	 */
	@PutMapping
	@ApiOperation("更新旧物订单")
	public Result<String> updateById(@RequestBody GoodsOrder request) {
		// 调用服务层更新订单信息
		if (!goodsOrderService.updateById(request)) {
			return Result.error("更新失败!");
		}
		return Result.success();
	}

	/**
	 * 根据ID查询旧物订单详情
	 * 
	 * @param id 订单ID
	 * @return 订单详情
	 */
	@GetMapping("/{id}")
	@ApiOperation("查询旧物订单详情")
	public Result<GoodsOrder> getById(@PathVariable String id) {
		return Result.success(goodsOrderService.getById(id));
	}

	/**
	 * 查询旧物订单列表
	 * 支持条件查询
	 * 
	 * @param request 查询条件
	 * @return 订单列表
	 */
	@GetMapping("/list")
	@ApiOperation("查询旧物订单列表")
	public Result<List<GoodsOrder>> list(GoodsOrder request) {
		// 构建查询条件
		LambdaQueryWrapper<GoodsOrder> wrapper = new LambdaQueryWrapper<>(request);
		return Result.success(goodsOrderService.list(wrapper));
	}

	/**
	 * 分页查询旧物订单
	 * 支持条件查询和分页，按ID降序排列
	 * 
	 * @param request 分页查询条件
	 * @return 分页结果
	 */
	@PostMapping("/page")
	@ApiOperation("分页查询旧物订单")
	public Result<Page<GoodsOrder>> page(@RequestBody PageQuery<GoodsOrder> request) {
		// 构建查询条件，按ID降序排列
		LambdaQueryWrapper<GoodsOrder> wrapper = new LambdaQueryWrapper<>(request.getParam());
		wrapper.orderByDesc(GoodsOrder::getId);
		// 执行分页查询
		Page<GoodsOrder> pageResult = goodsOrderService.page(request.toPage(), wrapper);
		return Result.success(pageResult);
	}
}